package com.hyz.yuaiagent.config;

import com.hyz.yuaiagent.constants.TestAPIKey;
import com.hyz.yuaiagent.tools.*;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbacks;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 集中的工具注册类
 * 该类负责将所有工具类注册并打包为一个工具回调数组
 * 这样做是为了方便在Spring框架中统一管理和调用这些工具
 */
@Configuration
public class ToolRegistrationConfig {

    /**
     * 注册并返回所有工具回调
     * 该方法无输入参数
     *
     * @return ToolCallback[] 包含所有工具回调的数组
     */
    @Bean
    public ToolCallback[] allTools() {
        // 实例化文件操作工具
        FileOperationTool fileOperationTool = new FileOperationTool();
        // 实例化网络搜索工具，并传入API密钥
        WebSearchTool webSearchTool = new WebSearchTool(TestAPIKey.WebSearchApiKey);
        // 实例化网络爬虫工具
        WebScrapingTool webScrapingTool = new WebScrapingTool();
        // 实例化资源下载工具
        ResourceDownloadTool resourceDownloadTool = new ResourceDownloadTool();
        // 实例化终端操作工具
        TerminalOperationTool terminalOperationTool = new TerminalOperationTool();
        // 实例化PDF生成工具
        PDFGenerationTool pdfGenerationTool = new PDFGenerationTool();
        //终止工具
        TerminateTool terminateTool = new TerminateTool();
        // 使用ToolCallbacks工具类将所有工具回调打包为一个数组并返回
        return ToolCallbacks.from(
                fileOperationTool,
                webSearchTool,
                webScrapingTool,
                resourceDownloadTool,
                terminalOperationTool,
                pdfGenerationTool,
                terminateTool
        );
    }
}
